<?php
/**
 * zen_eventos_ventana_principal.php
 * @author Juan Belon
 * @access public
 * @copyright LGPL, GPL
 * @package zenphp_generador
 * @version 0.1.1
 * @uses zenphp FrameWork
 * @link http://csl2-zenphp.forja.rediris.es
 * @link http://www.zenphp.es
 * @link https://forja.rediris.es/projects/csl2-zenphp/
 * @magic Clase surge para mantener todos los eventos en un sólo fichero
 */
// +----------------------------------------------------------------------
// | zenphp.es
// +----------------------------------------------------------------------
class zen_eventos_ventana_principal {
	/**
	* Es la ventana principal del generador de aplicaciones
	* @var zen_ventana_principal
	*/
	private $ventana_principal;
	/**
	* Constructor de eventos
	* @param zen_ventana_principal $ventana_principal
	* @return zen_eventos_ventana_principal
	*/
	public function zen_eventos_ventana_principal(&$ventana_principal){
		$this->ventana_principal =& $ventana_principal;
	}
	/**
	* Evento de pulsación de un menú construido con la clase zen_menu_gtk
	* @param str $nombre
	*/
	public function evento_menu($nombre) {
		switch ($nombre){
			case 'mnu_abrir':
			  //Crear y simular un evento doble click para activar la llamada de selección de fichero
				$this->seleccion_fichero($this->ventana_principal->widgets['vista_arbol'],"generado");
				break;
			case 'mnu_salir':
			  $this->salir_generador();
				break;
			case 'mnu_generar':
				//Vamos a cargar el generador
				if (!class_exists('zen_generador_poa')) require_once('clases_gtk/zen_generador_poa.php');
				static $generador;
				if (!isset($generador)) $generador = new zen_generador_poa($this->ventana_principal);
				if (!isset($this->ventana_principal->analizador->aplicaciones) || count($this->ventana_principal->analizador->aplicaciones)==0){
					$this->ventana_principal->fabrica->cuadro_dialogo("aceptacion","Primero ha de cargar un cartucho","Para poder generar el codigo de un cartucho primero tiene que cargar uno compatible con el generador de zenphp");
					break;
				}
				
				$generador->generar($this->ventana_principal->analizador->aplicaciones,$this->ventana_principal->incluir_zenphp);
				break;
			default:
			  if (ZF_GTK_MODO_DEBUG)
				 echo "El widget \"$nombre\" ha sido activado\n";
				break;
		}
	}
	/**
	* Evento para salir del programa
	*/
	public function salir_generador() {
		echo "Saliendo del generador...\n";
		Gtk::main_quit();
	}
	/**
	* Evento de selección de un fichero, se comprueba si es un cartucho
	* @param GtkTreeView $vista_arbol
	* @param callback $evento
	*/
	public function seleccion_fichero(&$vista_arbol, $evento) {
		if ( $evento=="generado" || //Evento generado por el programador?
		($evento->type == Gdk::KEY_PRESS && $evento->keyval == Gdk::KEY_Return)
		|| ($evento->type == Gdk::_2BUTTON_PRESS && $evento->button == 1)
		) {
			list($modelo, $iter) = $vista_arbol->get_selection()->get_selected();
			if ($iter !== null) {
				$ruta = $modelo->get_value($iter, 2);
				if ($modelo->get_value($iter, 3)) {
					$this->ventana_principal->cargar_ficheros($modelo, $ruta);
				} else { //Es un fichero
					if (strtolower(substr($ruta, -4))== '.xml') //Solo cargar XML al seleccionarlos
					 $this->ventana_principal->analizador->cargar_cartucho($ruta);
				}
			}
		} else {
			if (ZF_GTK_MODO_DEBUG)
			 echo "Tipo:".$evento->type." ,boton:".$evento->button;
		}
	}
	
	/**
	* Marca la inclusión del motor zenphp
	* @param GtkCheckbutton $comprobar_inclusion_zf
	*/
	public function marcar_inclusion(&$comprobar_inclusion_zf){
		$this->ventana_principal->incluir_zenphp = $comprobar_inclusion_zf->get_active();
	}
	//Recordar que se pueden tomar imágenes de otros cartuchos por eso es necesaria la ruta absoluta en los ficheros especificados en
	// el XML
	/**
	* Pone el texto de la clase informacion_arbol en la celda del arbol
	* @var GtkTreeViewColumn $columna 
	* @var GtkCellRendererPixbuf $celda 
	* @var GtkListStore $modelo
	* @var GtkTreeIter $iter
	*/
  public function poner_etiqueta_arbol_tipo($column, $celda, $modelo, $iter)
	{
	    $info = $modelo->get_value($iter, 0);
	    $celda->set_property('text', $info->tipo);
	}
	/**
	* Pone el texto de la clase informacion_arbol en la celda del arbol
	* @var GtkTreeViewColumn $columna 
	* @var GtkCellRendererPixbuf $celda 
	* @var GtkListStore $modelo
	* @var GtkTreeIter $iter
	*/
	public function poner_etiqueta_arbol_nombre($column, $celda, $modelo, $iter)
	{
	    $info = $modelo->get_value($iter, 0);
	    $celda->set_property('text', $info->contenido[1]);
	}
	/**
	* Pone el texto de la clase informacion_arbol en la celda del arbol
	* @var GtkTreeViewColumn $columna 
	* @var GtkCellRendererPixbuf $celda 
	* @var GtkListStore $modelo
	* @var GtkTreeIter $iter
	*/
  public function poner_etiqueta_arbol_id($column, $celda, $modelo, $iter)
	{
	    $info = $modelo->get_value($iter, 0);
	    $celda->set_property('text', $info->contenido[0]);
	}
	/**
	* Pone el texto de la clase informacion_arbol en la celda del arbol
	* @var GtkTreeViewColumn $columna 
	* @var GtkCellRendererPixbuf $celda 
	* @var GtkListStore $modelo
	* @var GtkTreeIter $iter
	*/
  public function poner_etiqueta_arbol_valor($column, $celda, $modelo, $iter){
	  $info = $modelo->get_value($iter, 0);
	  $celda->set_property('text', $info->valor);
	}
	
	/**
	* Evento de selección de una base de datos de la lista
	* @param GtkCList $widget
	* @param int $fila
	* @param int $columna
	* @param GdkEvent $evento
	*/
  public function seleccion_bd($widget, $fila, $columna,  $evento) {
	 if (($evento->type == Gdk::KEY_PRESS && $evento->keyval == Gdk::KEY_Return)
		|| ($evento->type == Gdk::_2BUTTON_PRESS && $evento->button == 1)
		) 
		@$this->ventana_principal->mysql_admin =& new zen_gtk_ventana_mysql_admin(
                //Recordar que la columna 0 del árbol de las bases de datos es un icono (Pixmap)
			$widget->get_text($fila,2), $widget->get_text($fila,3), $widget->get_text($fila,1)
			//$datos['usuario'],$datos['contrasena'],$datos['servidor']
		);
	 
	}
	/**
	* @param GtkTreeStore $objeto
	*/
	public function propiedades_cartucho_cambian($seleccion){
    $vista_arbol = $seleccion->get_tree_view();
    $caja =& $this->ventana_principal->widgets['caja_codigo'];
    $buffer=& $this->ventana_principal->widgets['buffer_codigo'];
    if (class_exists('GtkSourceLanguagesManager')){
    	$gestor_lenguaje = new GtkSourceLanguagesManager();
		$lenguaje = $gestor_lenguaje->get_language_from_mime_type("text/x-php-source"); //listado en http://www.kksou.com/php-gtk2/articles/use-GtkSourceView-to-display-source-code---Part-1.php		
		$buffer->set_language($lenguaje);    
    }
    if (is_a($buffer,"GtkSourceBuffer")){
    	$buffer->begin_not_undoable_action();
    }
    
    /** @var elemento_configuracion_arbol $elemento */
    //$elemento = $vista_arbol->get_data('elemento');
    list($model, $iter) = $seleccion->get_selected();
    if ($iter) {
        $info = $model->get_value($iter, 0);
        if ($info->tipo == 'Visualizador'){
        	$this->ventana_principal->fabrica->highlightSource($info->contenido[0],true,$buffer);
        	
        } else {
          $buffer->set_text($info->contenido[0]);
        }
        
    } else {
        $buffer->set_text("");
    }
    if (is_a($buffer,"GtkSourceBuffer")){
    	$buffer->end_not_undoable_action();
    }
}
}
?>